001 /*
002 * Copyright 2005 Stephen J. McConnell
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
013 * implied.
014 *
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package net.dpml.tools.info;
020
021 import java.util.Arrays;
022 import java.util.Properties;
023
024 import net.dpml.library.info.AbstractDirective;
025
026 import net.dpml.lang.UnknownKeyException;
027
028 /**
029 * The BuilderDirective class describes the configuration of the build system.
030 *
031 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
032 * @version 1.1.0
033 */
034 public final class BuilderDirective extends AbstractDirective
035 {
036 private final ListenerDirective[] m_listeners;
037 private final String m_phase;
038
039 /**
040 * Creation of a new library directive.
041 * @param listeners an array of listener directives
042 * @param phase the default target phase
043 * @param properties supplimentary properties
044 * @exception UnknownKeyException if a unknown key is referenced
045 */
046 public BuilderDirective(
047 ListenerDirective[] listeners, String phase, Properties properties ) throws UnknownKeyException
048 {
049 super( properties );
050
051 if( null == listeners )
052 {
053 throw new NullPointerException( "listeners" );
054 }
055 if( null == phase )
056 {
057 throw new NullPointerException( "phase" );
058 }
059 for( int i=0; i<listeners.length; i++ )
060 {
061 if( null == listeners[i] )
062 {
063 throw new NullPointerException( "listener" );
064 }
065 }
066
067 m_phase = phase;
068 m_listeners = listeners;
069 }
070
071 /**
072 * Return the set of listener directives.
073 * @return the listener directive array
074 */
075 public ListenerDirective[] getListenerDirectives()
076 {
077 return m_listeners;
078 }
079
080 /**
081 * Return the default phase.
082 * @return the default phase name.
083 */
084 public String getDefaultPhase()
085 {
086 return m_phase;
087 }
088
089 /**
090 * Compare this object with another for equality.
091 * @param other the other object
092 * @return true if equal
093 */
094 public boolean equals( Object other )
095 {
096 if( super.equals( other ) && ( other instanceof BuilderDirective ) )
097 {
098 BuilderDirective object = (BuilderDirective) other;
099 if( !equals( m_phase, object.m_phase ) )
100 {
101 return false;
102 }
103 else
104 {
105 return Arrays.equals( m_listeners, object.m_listeners );
106 }
107 }
108 else
109 {
110 return false;
111 }
112 }
113
114 /**
115 * Compute the hash code value.
116 * @return the hash value
117 */
118 public int hashCode()
119 {
120 int hash = super.hashCode();
121 hash ^= super.hashValue( m_phase );
122 hash ^= super.hashArray( m_listeners );
123 return hash;
124 }
125 }